草庐IT

Java HotSpot 枚举开销

全部标签

c++ - 未初始化的枚举变量值

我通过使用枚举声明新类型DAY,然后从它声明两个变量day1和day2,然后我应该看到0到6之间的值,当我使用它们时未初始化,因为值在enumlist中介于0到6之间,但是我收到这些值,而不是-858993460。你能解释一下为什么我收到这些值而不是0到6吗?#includeusingnamespacestd;intmain(){enumDAY{SAT,SUN,MON,TUE,WED,THU,FRI};DAYday1,day2;cout 最佳答案 枚举不限于仅采用声明的值。它有一个底层类型(一个数字类型,至少大到足以表示所有值),并

c++ - 如何在运行时以最小的开销共享全局常量?

我正在使用C++11。我不允许使用boost等外部库。我必须只使用STL。我有一些事件,必须标识为字符串常量。我不允许使用枚举或整数或任何其他数据类型。例如:"event_name1""event_name2""some_other_event_name3""a_different_event_name12"然后我有一些类需要使用这些字符串,但不知道其他类的存在(它们彼此没有任何关系)。classPanel{voidpostEvent(){SomeSingleton::postEvent("event_name");}}另一个类::classSomeClass{SomeClass(){

编译器无法正确识别 C++ 枚举

谁能解释为什么以下代码无法编译(在g++(GCC)3.2.320030502(RedHatLinux3.2.3-49)上)?structX{public:enumState{A,B,C};X(States){}};intmain(){X(X::A);}我得到的信息是:jjj.cpp:在函数'intmain()'中:jjj.cpp:10:'XX::A'不是'structX'的静态成员jjj.cpp:10:没有匹配函数来调用'X::X()'jjj.cpp:1:候选人是:X::X(constX&)jjj.cpp:5:X::X(X::State)`这是错误的代码还是编译器错误?问题由Neil+

c++ - C++ 中内置类型的 const 修饰符的开销

我更喜欢将const修饰符添加到我编写的函数中的所有内置参数。例如:voidfoo(constintarg1,constdoublearg2);对我来说比:voidfoo(intarg1,doublearg2);代码审查后,我得知const修饰符在应用于整数和内置类型时会带来开销。这是真的吗?为什么?谢谢, 最佳答案 它的开销并不比typedef多。你的同事错了。如果您想说服他,请打印出两个变体的反汇编代码,并向您的同事展示它们是相同的。但是,像这样向原始类型添​​加const限定符是完全没有意义和徒劳的。不管怎样,它们都是被复制的

c++ - Rust 位域和枚举 C++ 风格

我是一名来自C/C++的Rust初学者。首先,我尝试使用user32.MessageBox为MicrosoftWindows创建一个简单的“Hello-World”类程序。我偶然发现了与位域相关的问题。免责声明:所有代码片段都是在SO编辑器中编写的,可能包含错误。C中的消息框“Hello-World”调用函数的UTF-16LE版本所需的统一C声明是:enumMessageBoxResult{IDFAILED,IDOK,IDCANCEL,IDABORT,IDRETRY,IDIGNORE,IDYES,IDNO,IDTRYAGAIN=10,IDCONTINUE};enumMessageBox

c++ - 从其他类访问枚举值

在我的项目中,我在一个类中定义了一个枚举,它在整个类中使用。在重构期间,该枚举被移至另一个类。所以我只是简单地在我原来的类中typedef编辑它,就像这样:classA{public:enumE{e1,e2};};classB{public:typedefA::EE;};现在变量定义、返回值、函数参数等工作完美。只有当我想访问我的第二个类中的枚举值时,我仍然需要用周围类的名称来限定它们,例如Ee=A::e1;有没有办法避免这种情况,还是我必须将其复制到每次出现的枚举值中? 最佳答案 您将每个枚举放入一个嵌套类中,您可以在自己的类中使

c++ - 从类方法返回作用域枚举时命名空间混淆

我在C++中有以下代码:classPerson{public:enumGender{Male,Female};GenderGetGender()const;}我以这种方式将它包装在boost::python中:BOOST_PYTHON_MODULE(TestPython){scopethe_scope=class_("Person").def("GetGender",&Person::GetGender);enum_("Gender").value(Male,Person::Male).value(Female,Person::Female).export_values();}当我尝试

c++ - g++-4.4 中的强类型枚举

根据GCCC++11supportstatuswebsite,强类型枚举可用于g++4.4和更大。但是以下内容不能用g++4.4编译:enumclassFoo{value_1,value_2};intmain(){Fooa=Foo::value_1;Foob=Foo::value_2;constbooltest=(a错误信息是error:invalidoperandsoftypes‘Foo’and‘Foo’tobinary‘operator.接受代码的编译器包括g++-4.6,g++-4.7,g++-4.8和clang++3.2.(我无法使用g++-4.5进行测试,因为我目前没有安装它

c++ - 以通用方式选择有效的随机枚举值

假设我们有一个枚举类型E.enumclassE:underlying_type_of_E{v1=uE1,v2=uE2,//...vN=uEN};typedeftypenamestd::underlying_type::typeuE;一般来说,并不是uE的所有值是E的有效值,因为我们可以选择它们之间的关系。有没有一种通用的方法来创建随机的、有效的(在定义中命名,而不是可分配)的E值?例如,这是行不通的:std::mt19937m;std::uniform_int_distributionrandomUE(0,std::numeric_limits::max());Ee=static_ca

c++ - 使用声明引入的枚举

我试图理解用嵌套名称说明符定义的枚举。标准说的是N4296:7.2/4[dcl.enum]:Iftheenum-keyisfollowedbyanested-name-specifier,theenum-specifiershallrefertoanenumerationthatwaspreviouslydeclareddirectlyintheclassornamespacetowhichthenested-name-specifierrefers(i.e.,neitherinheritednorintroducedbyausing-declaration),andtheenum-s